#ifndef INFOUSUARIOS_H
#define INFOUSUARIOS_H

#include "aed2.h"
#include "ListaOrd.h"
#include "DiccTrie.h"

class InfoUsuario
{
	public:
		InfoUsuario() : pais(0) {}; //es necesario para inicializar bien el DiccTrie de Rober. Así anda, ni idea por qué.
		InfoUsuario(Pais p) : pais(p) {};
		~InfoUsuario() {};
		void agregarAmigo(InfoUsuario*);
		void actualizarVisibles(InfoUsuario*);
		void agregarSolicitud(const Usuario&);
		ListaOrd::ItListaOrd CrearItVisibles();
		ListaOrd::ItListaTemp CrearItVisiblesRecientes();
		void agregarPublicado(Mensaje*); //Falta const
		void agregarVisible(Mensaje*);  //Falta const
		bool envioSolicitud(const Usuario) const;
		const Pais paisDe() const;
		Fecha fechaMasReciente(); //Faltan const aca, no andan por los de lista
		void borrarSolicitud(const Usuario);

		class ItListaInfoUsuario
			{
            public:

                ItListaInfoUsuario();
                ItListaInfoUsuario(Lista<InfoUsuario*>& l);
                ~ItListaInfoUsuario() {};
                bool HayMas() const;
                InfoUsuario* Actual() const;
                void Avanzar();

            private:

                ItUniLista<InfoUsuario*> it;
			};

		ItListaInfoUsuario CrearItAmigos();

		Lista<InfoUsuario*> amigos;

	private:
		ListaOrd visibles;
		ListaOrd publicados;
		DiccTrie<bool> solicitudes;
		Pais pais;

};

#endif
